import axios from 'axios'
import { Promise } from 'core-js'
import { Message } from 'element-ui' // 导入Message方法 提示消息 响应拦截器
import store from '@/store'

import router from '@/router'
import { getTime} from '@/utils/auth'
// create an axios instance
const service = axios.create({
  // 环境变量 根据打包指令读取env文件
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000 // request timeout
})


// 添加请求拦截器
service.interceptors.request.use(function (config) {
    /* 1.去vuex中获取token
        2.判断是否有token
        3.如果有,把token放到请求头中,注意格式
        4.如果没有就不携带
     */
    //console.log(config)
    const token = store.getters.token
    const time = getTime()
    // 如果有token, 并且时间没过期(小于2小时)
    if(token && Date.now() - time < 1000 * 60 * 60 * 60 * 2) {
        // 有token 统一携带token
        config.headers['Authorization'] = 'Bearer ' + token
    }
  // 在发送请求之前做些什么
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})


// 添加响应拦截器
service.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  // console.log('请求完成了')
  const { message, data, success} = response.data
  if(success) {
    return data
  } else {
    // 登陆失败了 error红色的提示消息
    Message.error(message)
     return Promise.reject(message)
  }
}, function (error) {
  // 对响应错误做点什么
  if(error.response.data.code === 10002) {
    store.dispatch('user/logout')
    router.push('/login')
   Message.error('登录信息失效')
  }
  return Promise.reject(error)
})

export default service
